package com.example.graphql_demo.fetcher;

import org.springframework.graphql.data.method.annotation.Argument;
import org.springframework.graphql.data.method.annotation.MutationMapping;
import org.springframework.graphql.data.method.annotation.QueryMapping;
import org.springframework.stereotype.Controller;

/**
 * @Description: 简单参数
 * @Version: V1.0
 *
 * 区别总结：
 * 操作类型： @MutationMapping 用于处理数据变更操作，@QueryMapping 用于处理数据查询操作。
 * 用途： @MutationMapping 通常用于执行数据的创建、更新、删除等变更操作；@QueryMapping 通常用于执行数据的查询操作。
 * 返回类型： @MutationMapping 方法通常会返回被操作后的结果或者确认信息；@QueryMapping 方法通常返回客户端请求的数据对象或集合。
 */
@Controller
public class HelloFetcher {

		/**
		 * 当客户端需要从系统中获取数据时
		 * @return
		 */
		@QueryMapping
		public String hello() {
				System.out.println("hello OK");
				return "OK";
		}

		@QueryMapping
		public String helloParam(@Argument String name) {
				System.out.println("hello OK");
				return name + "OK";
		}

		@QueryMapping
		public String helloParams(@Argument String name,@Argument Integer age) {
				System.out.println("hello OK");
				return name + " OK " + age;
		}

		/**
		 * 当客户端需要进行数据变更操作时，例如新增、更新或删除数据时
		 * @return
		 */
		@MutationMapping
		public String helloMutationMapping() {
				System.out.println("helloMutationMapping OK");
				return "helloMutationMapping";
		}

		@MutationMapping
		public String helloParamMutationMapping(@Argument String name) {
				System.out.println("helloMutationMapping OK");
				return name + " helloMutationMapping";
		}

		@MutationMapping
		public String helloParamsMutationMapping(@Argument String name,@Argument Integer age) {
				System.out.println("helloMutationMapping OK");
				return name + " helloMutationMapping " + age;
		}

}
